package com.viknix.threadpool.manager.server.dependence.task;

/**
 * @Author: Dongqi
 * @Date: 2021/11/22 09:39
 * @Version 1.0
 * @Description: 可以延迟和合并的抽象任务。
 */
public abstract class AbstractDelayTask implements TpmTask {

    /**
     * 两次处理之间的任务时间间隔，单位为毫秒。
     */
    private long taskInterval;

    /**
     * 上次处理的时间，单位为毫秒。
     */
    private long lastProcessTime;

    /**
     * 合并任务。
     *
     * @param task 需要和当前task合并的task
     */
    public abstract void merge(AbstractDelayTask task);

    public void setTaskInterval(long interval) {
        this.taskInterval = interval;
    }

    public long getTaskInterval() {
        return this.taskInterval;
    }

    public void setLastProcessTime(long lastProcessTime) {
        this.lastProcessTime = lastProcessTime;
    }

    public long getLastProcessTime() {
        return this.lastProcessTime;
    }

    @Override
    public boolean shouldProcess() {
        return (System.currentTimeMillis() - this.lastProcessTime >= this.taskInterval);
    }

}
